Deeplearning 4jではニューラルネットワークの各パラメータ/ハイパーパラメータを関数で設定できる。ニューラルネットワーク全体に関わるパラメータは NeuralNetConfiguration.Builderクラスに対して設定し、各層に関わるパラメータはLayer.Builderクラスに対し て設定する。以下にDeeplearning 4jにおける主な設定項目を示す。すべてのパラメータ一覧はJavaDoc(
*1,
*2,
*3)やリファレンス(
*4)を参照のこと。
ニューラルネットワーク全体(NeuralNetConfiguration.Builder)の設定項目
NeuralNetConfiguration.Builderで設定する主な項目は以下の通りである。
設定項目 |
内容 |
seed関数 |
ランダム値の生成に利用するシード値を指定 |
iterations関数 |
1回のMultiLayerNetwork::fit関数呼出で学習する回数を指定 |
learningRate関数 |
学習率\(\eta\)を指定。デフォルトは0.1 |
miniBatch関数 |
ミニバッチ学習をするかどうかを指定 |
regularization関数 |
正規化を行うかどうかを指定 |
l1 , l2 関数 |
L1正規化、L2正規化を指定。過学習を防ぐために利用 |
weightInit関数 |
重みパラメータの初期化方法を指定。デフォルトはWeightInit.VI
設定値 |
内容 |
DISTRIBUTION |
入力次元に基づいた分布 |
NORMALIZED |
正規分布 |
ZERO |
0 |
SIZE |
入力の次元(shape)の最大値~最小値の一様分布(と思われる) |
UNIFORM |
入力の最大値~最小値の一様分布(と思われる) |
VI |
分散が正規化された値 |
RELU |
平均=0、分散=\(\frac{2}{nIn}\)の正規分布 |
XAVIER |
平均=0、分散=\(\frac{1}{nOut+nIn}\)の正規分布 |
|
optimizationAlgo関数 |
学習アルゴリズムを指定。デフォルトはOptimizationAlgorithm.CONJUGATE_GRADIENT
設定値 |
内容 |
CONJUGATE_GRADIENT |
共役勾配法 |
HESSIAN_FREE |
Hessian-Free法 |
LBFGS |
L-BFGS法 |
LINE_GRADIENT_DESCENT |
直線探索を用いた確率的勾配降下法 |
STOCHASTIC_GRADIENT_DESCENT |
確率的勾配降下法 |
|
updater関数 |
学習アルゴリズムでパラメータ学習する際の拡張方法を指定。(*8)
設定値 |
内容 |
ADADELTA |
勾配を利用したアップデータ及び学習アルゴリズム。SGD(ネットワーク内のパラメータ更新に同じ学習率を利用)とは異なり、パラメータ毎に学習率を変化させる。
論文「ADADELTA: AN ADAPTIVE LEARNING RATE METHOD」 |
ADAGRAD |
勾配の2乗をモニタリングすることにより、パラメータ毎に学習率を最適化する。SGDの代わりに利用でき、スパースなデータに有効。
論文「Adaptive Subgradient Methods for Online Learning and Stochastic Optimization」 |
ADAM |
rmspropに似たアップデータ。勾配の移動平均を利用する
論文「Adam: A Method for Stochastic Optimization」 |
CUSTOM |
自身で定義 |
NESTEROVS |
論文「Advances in Optimizing Recurrent Networks」 |
NONE |
なし |
RMSPROP |
論文「Generating Sequences With Recurrent Neural Networks」 |
SGD |
確率的勾配降下法 |
|
momentu関数 |
慣性項を指定。学習を早くするために利用する |
list関数 |
この関数呼び出し後にニューラルネットワークの層を宣言する |
layer関数 |
ニューラルネットワークの層の構成情報を追加する |
ニューラルネットワークの層(Layer.Builder)の設定項目
Layer.Builderで設定する主な項目は以下のとおりである。
設定項目 |
内容 |
nln関数 |
入力データ数を指定。 |
nOut関数 |
出力データ数を指定。 |
activation関数 |
活性化関数を指定。デフォルトは「"sigmoid"」
設定値 |
内容 |
"identity" |
恒等変換\(f(x)=x\) |
"relu" |
ランプ関数 |
"tanh" |
ハイパボリック・タンジェント |
"sigmoid" |
シグモイド関数 |
"softmax" |
ソフトマックス関数 |
"hardtanh" |
hard tanh |
"leakyrelu" |
論文「Rectifier Nonlinearities Improve Neural Network Acoustic Models 」 |
"maxout" |
maxout関数 |
"softsign" |
ソフトサイン関数 |
"softplus" |
ソフトプラス関数 |
|
LossFunction
(Layer.Builderの引数) |
誤差関数を指定。
設定値 |
内容 |
MSE |
誤差の平方和(線形回帰) |
EXPLL |
対数尤度関数(ポアソン回帰) |
XENT |
交差エントロピー(二項分類) |
MCXENT |
交差エントロピー(多クラス分類) |
NEGATIVELOGLIKELIHOOD |
負の対数尤度関数 |
RECONSTRUCTION_CROSSENTROPY |
Reconstruction 交差エントロピー |
RMSE_XENT |
RMSE 交差エントロピー |
SQUARED_LOSS |
二乗損失 |
CUSTOM |
自身で誤差関数を定義 |
|
■ 参照
- JavaDoc DeepLearning4j
- JavaDoc ND4J
- JavaDoc 「Class Layer.Builder>」
- DeepLearning4j 公式 「NeuralNetConfiguration Class」
- JavaDoc 「Enum WeightInit」
- JavaDoc 「Enum OptimizationAlgorithm」
- JavaDoc 「Enum Updater」
- DeepLearning4j 公式 「Deeplearning4j Updaters Explained」
- 俺とプログラミング 「CNNの学習に最高の性能を示す最適化手法はどれか」
- JavaDoc 「Enum LossFunctions.LossFunction」